/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package byblos.negocio.acomodacao;

import byblos.negocio.pacote.ItemPacoteCategoria;
import byblos.negocio.reserva.AcomodacaoOnline;
import byblos.persistencia.Removivel;
import byblos.util.FormatadorMoeda;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

/**
 *
 * @author Diego
 */
@Entity
public class CategoriaAcomodacao implements Removivel, Serializable {

    @Id
    @GeneratedValue
    private int id;
    private String nome;
    @OneToMany(cascade = CascadeType.REMOVE, mappedBy = "categoria")
    private List<ItemPacoteCategoria> itens = new ArrayList<ItemPacoteCategoria>();
    @OneToMany(mappedBy = "categoria")
    private List<Acomodacao> acomodacoes;
    @OneToMany(mappedBy = "categoria")
    private List<AcomodacaoOnline> acomodacoesOnline;
    @OneToOne(cascade = CascadeType.ALL)
    private TabelaTarifa tabela = new TabelaTarifa();
    @OneToOne(cascade = CascadeType.ALL)
    private TabelaTarifa tabelaAlta = new TabelaTarifa();
    private TipoAcomodacao capacidade = TipoAcomodacao.DUPLO;
    private boolean removido;

    public CategoriaAcomodacao() {
    }

    public TipoAcomodacao getCapacidade() {
        return capacidade;
    }

    public void setCapacidade(TipoAcomodacao capacidade) {
        this.capacidade = capacidade;
    }

    public TabelaTarifa getTabela() {
        return tabela;
    }

    public void setTabela(TabelaTarifa tabela) {
        this.tabela = tabela;
    }

    public TabelaTarifa getTabelaAlta() {
        return tabelaAlta;
    }

    public void setTabelaAlta(TabelaTarifa tabelaAlta) {
        this.tabelaAlta = tabelaAlta;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public double getValor(TipoAcomodacao tipo, boolean temporada) {
        if (temporada) {
            return tabelaAlta.getValor(tipo);
        } else {
            return tabela.getValor(tipo);
        }
    }

    public void setValor(double valor, TipoAcomodacao tipo, boolean temporada) {
        if (temporada) {
            tabelaAlta.setValor(valor, tipo);
        } else {
            tabela.setValor(valor, tipo);
        }
    }

    public List<Acomodacao> getAcomodacoes() {
        return acomodacoes;
    }

    public int getQuantidadeAcomodacoes() {
        if (acomodacoes == null) {
            return 0;
        } else {
            return acomodacoes.size();
        }
    }

    public void setAcomodacoes(List<Acomodacao> acomodacoes) {
        this.acomodacoes = acomodacoes;
    }

    public List<ItemPacoteCategoria> getItens() {
        return itens;
    }

    public void setItens(List<ItemPacoteCategoria> itens) {
        this.itens = itens;
    }

    public double getValorSingleBaixa() {
        return getValor(TipoAcomodacao.SINGLE, false);
    }

    public void setValorSingleBaixa(double valorSingleBaixa) {
        setValor(valorSingleBaixa, TipoAcomodacao.SINGLE, false);
    }

    public double getValorSingleAlta() {
        return getValor(TipoAcomodacao.SINGLE, true);
    }

    public void setValorSingleAlta(double valorSingleAlta) {
        setValor(valorSingleAlta, TipoAcomodacao.SINGLE, true);
    }

    public double getValorDuploBaixa() {
        return getValor(TipoAcomodacao.DUPLO, false);
    }

    public void setValorDuploBaixa(double valorDuploBaixa) {
        setValor(valorDuploBaixa, TipoAcomodacao.DUPLO, false);
    }

    public double getValorDuploAlta() {
        return getValor(TipoAcomodacao.DUPLO, true);
    }

    public void setValorDuploAlta(double valorDuploAlta) {
        setValor(valorDuploAlta, TipoAcomodacao.DUPLO, true);
    }

    public double getValorTriploBaixa() {
        return getValor(TipoAcomodacao.TRIPLO, false);
    }

    public void setValorTriploBaixa(double valorTriploBaixa) {
        setValor(valorTriploBaixa, TipoAcomodacao.TRIPLO, false);
    }

    public double getValorTriploAlta() {
        return getValor(TipoAcomodacao.TRIPLO, true);
    }

    public void setValorTriploAlta(double valorTriploAlta) {
        setValor(valorTriploAlta, TipoAcomodacao.TRIPLO, true);
    }

    public double getValorQuadBaixa() {
        return getValor(TipoAcomodacao.QUADRUPLO, false);
    }

    public void setValorQuadBaixa(double valorQuadBaixa) {
        setValor(valorQuadBaixa, TipoAcomodacao.QUADRUPLO, false);
    }

    public double getValorQuadAlta() {
        return getValor(TipoAcomodacao.QUADRUPLO, true);
    }

    public void setValorQuadAlta(double valorQuadAlta) {
        setValor(valorQuadAlta, TipoAcomodacao.QUADRUPLO, true);
    }

    public double getValorQuintBaixa() {
        return getValor(TipoAcomodacao.QUINTUPLO, false);
    }

    public void setValorQuintBaixa(double valorQuintBaixa) {
        setValor(valorQuintBaixa, TipoAcomodacao.QUINTUPLO, false);
    }

    public double getValorQuintAlta() {
        return getValor(TipoAcomodacao.QUINTUPLO, true);
    }

    public void setValorQuintAlta(double valorQuintAlta) {
        setValor(valorQuintAlta, TipoAcomodacao.QUINTUPLO, true);
    }

    public String getValorSingleBaixaMoeda() {
        return FormatadorMoeda.mascaraDinheiro(getValor(TipoAcomodacao.SINGLE, false), false);
    }

    public String getValorSingleAltaMoeda() {
        return FormatadorMoeda.mascaraDinheiro(getValor(TipoAcomodacao.SINGLE, true), false);
    }

    public String getValorDuploBaixaMoeda() {
        return FormatadorMoeda.mascaraDinheiro(getValor(TipoAcomodacao.DUPLO, false), false);
    }

    public String getValorDuploAltaMoeda() {
        return FormatadorMoeda.mascaraDinheiro(getValor(TipoAcomodacao.DUPLO, true), false);
    }

    public String getValorTriploBaixaMoeda() {
        return FormatadorMoeda.mascaraDinheiro(getValor(TipoAcomodacao.TRIPLO, false), false);
    }

    public String getValorTriploAltaMoeda() {
        return FormatadorMoeda.mascaraDinheiro(getValor(TipoAcomodacao.TRIPLO, true), false);
    }

    public String getValorQuadBaixaMoeda() {
        return FormatadorMoeda.mascaraDinheiro(getValor(TipoAcomodacao.QUADRUPLO, false), false);
    }

    public String getValorQuadAltaMoeda() {
        return FormatadorMoeda.mascaraDinheiro(getValor(TipoAcomodacao.QUADRUPLO, true), false);
    }

    public String getValorQuintBaixaMoeda() {
        return FormatadorMoeda.mascaraDinheiro(getValor(TipoAcomodacao.QUINTUPLO, false), false);
    }

    public String getValorQuintAltaMoeda() {
        return FormatadorMoeda.mascaraDinheiro(getValor(TipoAcomodacao.QUINTUPLO, true), false);
    }

    public List<AcomodacaoOnline> getAcomodacoesOnline() {
        return acomodacoesOnline;
    }

    public void setAcomodacoesOnline(List<AcomodacaoOnline> acomodacoesOnline) {
        this.acomodacoesOnline = acomodacoesOnline;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (int) id;
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (!(object instanceof CategoriaAcomodacao)) {
            return false;
        }
        CategoriaAcomodacao other = (CategoriaAcomodacao) object;
        if (this.id != other.id) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return nome;
    }

    public void setRemovido(boolean removido) {
        this.removido = removido;
    }

    public boolean isRemovido() {
        return removido;
    }
}
